home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 July / EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso / earcd / game / role / omegagfx.lha / item.c < prev    next >
C/C++ Source or Header  |  1997-01-11  |  20KB  |  696 lines

  1. /* omega copyright (C) 1987,1988,1989 by Laurence Raphael Brothers */
  2. /* item.c */
  3.  
  4. #include "glob.h"
  5.  
  6. /* make a random new object, returning pointer */
  7. /* may return NULL. */
  8. pob create_object(itemlevel)
  9. int itemlevel;
  10. {
  11.   pob new;
  12.   int  r; 
  13.   int ok = FALSE;
  14.  
  15.   while (! ok) {
  16.     new = ((pob) checkmalloc(sizeof(objtype)));
  17.     r= random_range(135);
  18.     if (r < 20) make_thing(new,-1);
  19.     else if (r < 40) make_food(new,-1);
  20.     else if (r < 50) make_scroll(new,-1);
  21.     else if (r < 60) make_potion(new,-1);
  22.     else if (r < 70) make_weapon(new,-1);
  23.     else if (r < 80) make_armor(new,-1);
  24.     else if (r < 90) make_shield(new,-1);
  25.     else if (r < 100) make_stick(new,-1);
  26.     else if (r < 110) make_boots(new,-1);
  27.     else if (r < 120) make_cloak(new,-1);
  28.     else if (r < 130) make_ring(new,-1);
  29.     else make_artifact(new,-1);
  30.     /* not ok if object is too good for level, or if unique and already made */
  31.     /* 1/100 chance of finding object if too good for level */
  32.     ok = ((new->uniqueness < UNIQUE_MADE) &&
  33.       ((new->level < itemlevel+random_range(3))
  34.        || (random_range(100)==23)));
  35.     if (!ok)
  36.     {
  37.     free((char *) new);
  38.     return NULL;
  39.     }
  40.   }
  41.   if (new->uniqueness == UNIQUE_UNMADE) 
  42.     Objects[new->id].uniqueness=UNIQUE_MADE;
  43.   return(new);
  44. }
  45.  
  46. void make_cash(new,level)
  47. pob new;
  48. int level;
  49. {
  50.   *new = Objects[CASHID];
  51.   new->basevalue = random_range(level*level+10)+1; /* aux is AU value */
  52.   new->objstr = cashstr();
  53.   new->cursestr = new->truename = new->objstr;
  54. }
  55.  
  56. void make_food(new,id)
  57. pob new;
  58. int id;
  59. {
  60.   if (id == -1) id = random_range(NUMFOODS);
  61.   *new = Objects[FOODID+id];
  62. }
  63.  
  64.  
  65. void make_corpse(new,m)
  66. pob new;
  67. struct monster *m;
  68. {
  69.   *new = Objects[CORPSEID];
  70.   new->charge = m->id;
  71.   new->weight = m->corpseweight;
  72.   new->basevalue = m->corpsevalue;
  73.   new->known = 2;
  74.   new->objstr = m->corpsestr;
  75.   new->truename = new->cursestr = new->objstr;
  76.   if ((m->monchar&0xff) == '@')
  77.     new->usef = I_CANNIBAL;
  78.   else if (m_statusp(m,EDIBLE)) {
  79.     new->usef = I_FOOD;
  80.     new->aux = 6;
  81.   }
  82.   else if (m_statusp(m,POISONOUS))
  83.     new->usef = I_POISON_FOOD;
  84.   /* Special corpse-eating effects */
  85.   else switch(m->id) {
  86.   case ML1+1: /*tse tse fly */
  87.   case ML4+9: /*torpor beast */
  88.     new->usef = I_SLEEP_SELF;
  89.     break;
  90.   case ML2+5:
  91.     new->usef = I_INVISIBLE;
  92.     break;
  93.   case ML1+5: /* blipper */
  94.     new->usef = I_TELEPORT;
  95.     break;
  96.   case ML2+3: /* floating eye -- it's traditional.... */
  97.     new->usef = I_CLAIRVOYANCE;
  98.     break;
  99.   case ML4+11: /*astral fuzzy */
  100.     new->usef = I_DISPLACE;
  101.     break;
  102.   case ML4+12: /*s o law */
  103.     new->usef = I_CHAOS;
  104.     break;
  105.   case ML4+13: /*s o chaos */
  106.     new->usef = I_LAW;
  107.     break;
  108.   case ML5+9: /* astral vampire */
  109.     new->usef = I_ENCHANT;
  110.     break;
  111.   case ML5+11: /* manaburst */
  112.     new->usef = I_SPELLS;
  113.     break;
  114.   case ML6+9: /* rakshasa */
  115.     new->usef = I_TRUESIGHT;
  116.     break;
  117.   case ML7+0: /* behemoth */
  118.     new->usef = I_HEAL;
  119.     break;
  120.   case ML7+2: /* unicorn */
  121.     new->usef = I_NEUTRALIZE_POISON;
  122.     break;
  123.   case ML8+10: /*coma beast */
  124.     new->usef = I_ALERT;
  125.     break;
  126.   default:
  127.     new->usef = I_INEDIBLE; 
  128.     break;
  129.   }
  130. }
  131.  
  132.  
  133.  
  134.  
  135. void make_ring(new,id)
  136. pob new;
  137. int id;
  138. {
  139.   if (id == -1) id = random_range(NUMRINGS);
  140.   *new = Objects[RINGID+id];
  141.   if (new->blessing == 0) new->blessing = itemblessing();
  142.   if (new->plus == 0) new->plus = itemplus()+1;
  143.   if (new->blessing < 0) new->plus = -1 - abs(new->plus);
  144. }
  145.  
  146. void make_thing(new,id)
  147. pob new;
  148. int id;
  149. {
  150.   if (id == -1) id = random_range(NUMTHINGS);
  151.   *new = Objects[THINGID+id];
  152.   if (strcmp(new->objstr,"grot") == 0) {
  153.     new->objstr = grotname();
  154.     new->truename = new->cursestr = new->objstr;
  155.   }
  156. }
  157.  
  158.  
  159. void make_scroll(new,id)
  160. pob new;
  161. int id;
  162. {
  163.   if (id == -1) id = random_range(NUMSCROLLS);
  164.   *new = Objects[SCROLLID+id];
  165.   /* if a scroll of spells, aux is the spell id in Spells */
  166.   if (new->id == SCROLLID+1) {
  167.     new->aux = random_range(NUMSPELLS);
  168.   }
  169. }
  170.  
  171. void make_potion(new,id)
  172. pob new;
  173. int id;
  174. {
  175.   if (id == -1) id = random_range(NUMPOTIONS);
  176.   *new = Objects[POTIONID+id];
  177.   if (new->plus == 0) new->plus = itemplus();
  178. }
  179.  
  180. void make_weapon(new,id)
  181. pob new;
  182. int id;
  183. {
  184.   if (id == -1) id = random_range(NUMWEAPONS);
  185.   *new = Objects[WEAPONID+id];
  186.   if ((id == 28) || (id == 29)) /* bolt or arrow */
  187.     new->number = random_range(20)+1;
  188.   if (new->blessing == 0) new->blessing = itemblessing();
  189.   if (new->plus == 0) {
  190.     new->plus = itemplus();
  191.     if (new->blessing < 0)
  192.       new->plus = -1 - abs(new->plus);
  193.     else if (new->blessing > 0)
  194.       new->plus = 1 + abs(new->plus);
  195.   }
  196. }
  197.  
  198. void make_shield(new,id)
  199. pob new;
  200. int id;
  201. {
  202.   if (id == -1) id = random_range(NUMSHIELDS);
  203.   *new = Objects[SHIELDID+id];
  204.   if (new->plus == 0)
  205.     new->plus = itemplus();
  206.   if (new->blessing == 0) new->blessing = itemblessing();
  207.   if (new->blessing < 0)
  208.     new->plus = -1 - abs(new->plus);
  209.   else if (new->blessing > 0)
  210.     new->plus = 1 + abs(new->plus);
  211. }
  212.  
  213. void make_armor(new,id)
  214. pob new;
  215. int id;
  216. {
  217.   if (id == -1) id = random_range(NUMARMOR);
  218.   *new = Objects[ARMORID+id];
  219.   if (new->plus == 0) new->plus = itemplus();
  220.   if (new->blessing == 0) new->blessing = itemblessing();
  221.   if (new->blessing < 0)
  222.     new->plus = -1 - abs(new->plus);
  223.   else if (new->blessing > 0)
  224.     new->plus = 1 + abs(new->plus);  
  225. }
  226.  
  227. void make_cloak(new,id)
  228. pob new;
  229. int id;
  230. {
  231.   if (id == -1) id = random_range(NUMCLOAKS);
  232.   Objects[CLOAKID+4].plus = 2;
  233.   *new = Objects[CLOAKID+id];
  234.   if (new->blessing == 0) new->blessing = itemblessing();
  235. }
  236.  
  237. void make_boots(new,id)
  238. pob new;
  239. int id;
  240. {
  241.   if (id == -1) id = random_range(NUMBOOTS);
  242.   *new = Objects[BOOTID+id];
  243.   if (new->blessing == 0) new->blessing = itemblessing();
  244. }
  245.  
  246. void make_stick(new,id)
  247. pob new;
  248. int id;
  249. {
  250.   if (id == -1) id = random_range(NUMSTICKS);
  251.   *new = Objects[STICKID+id];
  252.   new->charge = itemcharge();
  253.   if (new->blessing == 0) new->blessing = itemblessing();
  254. }
  255.  
  256. void make_artifact(new,id)
  257. pob new;
  258. int id;
  259. {
  260.   if (id == -1)
  261.     do
  262.       id = random_range(NUMARTIFACTS);
  263.     while (Objects[id].uniqueness >= UNIQUE_MADE);
  264.   *new = Objects[ARTIFACTID+id];
  265. }
  266.  
  267.  
  268. /* this function is used to shuffle the id numbers of scrolls, potions, etc */
  269. /* taken from Knuth 2 */
  270. void shuffle(ids, number)
  271. int ids[];
  272. int number;
  273. {
  274.   int top, swap, with;
  275.  
  276.   for (top = 0; top < number; top++)
  277.     ids[top] = top;
  278.   for (top = number - 1; top >= 0; top--) {
  279.     swap = ids[top];
  280.     with = random_range(top + 1);    /* from  0 to top, inclusive */
  281.     ids[top] = ids[with];
  282.     ids[with] = swap;
  283.   }
  284. }
  285.  
  286. /* item name functions */
  287.  
  288. char *scrollname(id)
  289. int id;
  290. {
  291.   switch(scroll_ids[id]) {
  292.       case 0: return "scroll-GRISTOGRUE";
  293.       case 1: return "scroll-Kho Reck Tighp";
  294.       case 2: return "scroll-E Z";
  295.       case 3: return "scroll-Kevitz";
  296.       case 4: return "scroll-Arcanum Prime";
  297.       case 5: return "scroll-NYARLATHOTEP";
  298.       case 6: return "scroll-Gilthoniel";
  299.       case 7: return "scroll-Zarathustra";
  300.       case 8: return "scroll-Ancient Lore";
  301.       case 9: return "scroll-Eyes Only";
  302.       case 10: return "scroll-Ambogar Empheltz";
  303.       case 11: return "scroll-Isengard";
  304.       case 12: return "scroll-Deosil Widdershins";
  305.       case 13: return "scroll-Magister Paracelsus";
  306.       case 14: return "scroll-Qlipphotic Summons";
  307.       case 15: return "scroll-Aratron Samael";
  308.       case 16: return "scroll-De Wormiis Mysterius";
  309.       case 17: return "scroll-Necronomicon";
  310.       case 18: return "scroll-Pnakotic Manuscript";
  311.       case 19: return "scroll-Codex of Xalimar";
  312.       case 20: return "scroll-The Mabinogion";
  313.       case 21: return "scroll-Ginseng Shiatsu";
  314.       case 22: return "scroll-Tome of Tromax";
  315.       case 23: return "scroll-Book of the Dead ";
  316.       case 24: return "scroll-The Flame Tongue";
  317.       case 25: return "scroll-Karst Khogar";
  318.       case 26: return "scroll-The Yellow Sign";
  319.       case 27: return "scroll-The Kevillist Manifesto";
  320.       case 28: return "scroll-Goshtar Script";
  321.       default:
  322.       case 29: return "scroll-Pendragon Encryption";
  323.     }
  324. }
  325.  
  326. char *grotname()
  327. {
  328.   switch(random_range(20)) {
  329.     case 0: return "pot lid";
  330.     case 1: return "mound of offal";
  331.     case 2: return "sword that was broken";
  332.     case 3: return "salted snail";
  333.     case 4: return "key";
  334.     case 5: return "toadstool";
  335.     case 6: return "greenish spindle";
  336.     case 7: return "tin soldier";
  337.     case 8: return "broken yo-yo";
  338.     case 9: return "NYC subway map";
  339.     case 10: return "Nixon's the One! button";
  340.     case 11: return "beer can (empty)";
  341.     case 12: return "golden bejewelled falcon";
  342.     case 13: return "hamster cage";
  343.     case 14: return "wooden nickel";
  344.     case 15: return "three-dollar bill";
  345.     case 16: return "rosebud";
  346.     case 17: return "water pistol";
  347.     case 18: return "shattered skull";
  348.     default:
  349.     case 19: return "jawbone of an ass";
  350.   }
  351. }
  352.  
  353.  
  354.  
  355.  
  356. char *potionname(id)
  357. int id;
  358. {
  359.   switch (potion_ids[id]) {
  360.     case 0: return "vial of dewy liquid";
  361.     case 1: return "jug of tarry black substance";
  362.     case 2: return "flask of cold smoking froth";
  363.     case 3: return "phial of glowing fluid";
  364.     case 4: return "bottle of sickening slime";
  365.     case 5: return "sac of greenish gel";
  366.     case 6: return "wineskin of odorous goo";
  367.     case 7: return "canteen of sweet sap";
  368.     case 8: return "urn of clear fluid";
  369.     case 9: return "clotted grey ooze";
  370.     case 10: return "keg of bubbly golden fluid";
  371.     case 11: return "tube of minty paste";
  372.     case 12: return "pitcher of aromatic liquid";
  373.     case 13: return "pot of rancid grease";
  374.     case 14: return "thermos of hot black liquid";
  375.     case 15: return "magnum of deep red liquid";
  376.     case 16: return "vase full of ichor";
  377.     case 17: return "container of white cream";
  378.     case 18: return "syringe of clear fluid";
  379.     default:
  380.     case 19: return "can of volatile essence";
  381.   }      
  382. }
  383.  
  384.  
  385. char *stickname(id)
  386. int id;
  387. {
  388.   switch (stick_ids[id]) {
  389.     case 0: return "oaken staff";
  390.     case 1: return "heavy metal rod";
  391.     case 2: return "shaft of congealed light";
  392.     case 3: return "slender ceramic wand";
  393.     case 4: return "rune-inscribed bone wand";
  394.     case 5: return "knurly staff";
  395.     case 6: return "steel knobbed rod";
  396.     case 7: return "lucite wand";
  397.     case 8: return "sturdy alpenstock";
  398.     case 9: return "gem-studded ebony staff";
  399.     case 10: return "chromed sequinned staff";
  400.     case 11: return "old peeling stick";
  401.     case 12: return "jointed metal rod";
  402.     case 13: return "wand with lead ferrules";
  403.     case 14: return "forked wooden stick";
  404.     case 15: return "cane with gold eagle handle";
  405.     case 16: return "crystalline wand";
  406.     case 17: return "metal stick with trigger";
  407.     case 18: return "leather-handled stone rod";
  408.     default:
  409.     case 19: return "tiny mithril wand";
  410.   }      
  411. }
  412.  
  413. char *ringname(id)
  414. int id;
  415. {
  416.   switch (ring_ids[id]) {
  417.     case 0: return "gold ring with a blue gem";
  418.     case 1: return "brass ring";
  419.     case 2: return "mithril ring with a red gem";
  420.     case 3: return "platinum ring";  break;
  421.     case 4: return "gold dragon's head ring";
  422.     case 5: return "bronze ring";
  423.     case 6: return "aardvark seal ring";
  424.     case 7: return "grey metal ring";
  425.     case 8: return "silver skull ring";
  426.     case 9: return "onyx ring";
  427.     case 10: return "Collegium Magii class ring";
  428.     case 11: return "worn stone ring";
  429.     case 12: return "diorite ring";
  430.     case 13: return "ancient scarab ring";  break;
  431.     case 14: return "plastic charm ring";
  432.     case 15: return "soapy gypsum ring";
  433.     case 16: return "glass ring";
  434.     case 17: return "glowing bluestone ring";
  435.     case 18: return "ring with eye sigil";
  436.     default:
  437.     case 19: return "zirconium ring";
  438.   }      
  439. }
  440.  
  441.  
  442. char *cloakname(id)
  443. int id;
  444. {
  445.   switch (cloak_ids[id]) {
  446.     case 0: return "tattered piece of cloth";
  447.     case 1: return "fuligin cloak";
  448.     case 2: return "chintz cloak";
  449.     case 3: return "diaphanous cape";  break;
  450.     case 4: return "red half-cloak";
  451.     case 5: return "mouse-hide cloak";
  452.     case 6: return "kelly green cloak";
  453.     case 7: return "cloth-of-gold cloak";
  454.     case 8: return "dirty old cloak";
  455.     case 9: return "weightless cloak";
  456.     case 10: return "boat cloak";
  457.     case 11: return "greasy tarpaulin";
  458.     case 12: return "sable cloak";
  459.     case 13: return "soft velvet cloak";  break;
  460.     case 14: return "opera cape";
  461.     case 15: return "elegant brocade cloak";
  462.     case 16: return "cloak of many colors";
  463.     case 17: return "grey-green rag";
  464.     case 18: return "puce and chartreuse cloak";
  465.     default:
  466.     case 19: return "smoky cloak";
  467.   }      
  468. }
  469.  
  470. char *bootname(id)
  471. int id;
  472. {
  473.   switch (boot_ids[id]) {
  474.     case 0: return "sturdy leather boots";
  475.     case 1: return "calf-length moccasins";
  476.     case 2: return "dark-colored tabi";
  477.     case 3: return "patent-leather shoes";  break;
  478.     case 4: return "beaten-up gumshoes";
  479.     case 5: return "alligator-hide boots";
  480.     case 6: return "comfortable sandals";
  481.     case 7: return "roller skates";
  482.     case 8: return "purple suede gaiters";
  483.     case 9: return "mirror-plated wingtips";
  484.     case 10: return "heavy workboots";
  485.     case 11: return "polyurethane-soled sneakers";
  486.     case 12: return "clodhoppers";
  487.     case 13: return "wooden shoes";  break;
  488.     case 14: return "ski boots";
  489.     case 15: return "hob-nailed boots";
  490.     case 16: return "elven boots";
  491.     case 17: return "cowboy boots";
  492.     case 18: return "flipflop slippers";
  493.     default:
  494.     case 19: return "riding boots";
  495.   }      
  496. }
  497.  
  498. int itemplus()
  499. {
  500.   int p = 0;
  501.  
  502.   while (random_range(2) == 0)
  503.     p++;
  504.   return(p);
  505. }
  506.  
  507.  
  508.  
  509. int itemcharge()
  510. {
  511.   return(random_range(20)+1);
  512. }
  513.  
  514.  
  515.  
  516. int itemblessing()
  517. {
  518.   switch(random_range(10)) {
  519.     case 0:
  520.     case 1:return(-1-random_range(10));
  521.     case 8:
  522.     case 9:return(1+random_range(10));
  523.     default: return(0);       
  524.   }
  525. }
  526.  
  527.     
  528. int twohandedp(id)
  529. int id;
  530. {
  531.   switch(id) {
  532.   case WEAPONID+5:
  533.   case WEAPONID+12:
  534.   case WEAPONID+18:
  535.   case WEAPONID+20:
  536.   case WEAPONID+26:
  537.   case WEAPONID+27:
  538.   case WEAPONID+32:
  539.   case WEAPONID+36:
  540.   case WEAPONID+38:
  541.   case WEAPONID+39:
  542.     return(TRUE);
  543.   default: return(FALSE);
  544.   }
  545. }
  546.  
  547.  
  548. void item_use(o)
  549. struct object *o;
  550. {
  551.   clearmsg();
  552.   switch(o->usef) {
  553.     case -1:i_no_op(o); break;
  554.     case 0:i_nothing(o); break;
  555.  
  556.     /* scrolls */        
  557.     case I_SPELLS: i_spells(o); break;
  558.     case I_BLESS: i_bless(o); break;
  559.     case I_ACQUIRE: i_acquire(o); break;
  560.     case I_ENCHANT: i_enchant(o); break;
  561.     case I_TELEPORT: i_teleport(o); break;
  562.     case I_WISH: i_wish(o); break;
  563.     case I_CLAIRVOYANCE: i_clairvoyance(o); break;
  564.     case I_DISPLACE: i_displace(o); break;
  565.     case I_ID: i_id(o); break;
  566.     case I_JANE_T: i_jane_t(o); break;
  567.     case I_FLUX: i_flux(o); break;
  568.     case I_WARP: i_warp(o); break;
  569.     case I_ALERT: i_alert(o); break;
  570.     case I_CHARGE: i_charge(o); break;
  571.     case I_KNOWLEDGE: i_knowledge(o); break;
  572.     case I_LAW: i_law(o); break;
  573.     case I_HINT: hint(); break;
  574.     case I_HERO: i_hero(o); break;
  575.     case I_TRUESIGHT: i_truesight(o); break;
  576.     case I_ILLUMINATE: i_illuminate(o); break;
  577.     case I_DEFLECT: i_deflect(o); break;
  578.  
  579.     /* potion functions */
  580.     case I_HEAL: i_heal(o); break;
  581.     case I_OBJDET: i_objdet(o); break;
  582.     case I_MONDET: i_mondet(o); break;
  583.     case I_SLEEP_SELF: i_sleep_self(o); break;
  584.     case I_NEUTRALIZE_POISON: i_neutralize_poison(o); break;
  585.     case I_RESTORE: i_restore(o); break;
  586.     case I_SPEED: i_speed(o); break;
  587.     case I_AZOTH: i_azoth(o); break;
  588.     case I_AUGMENT: i_augment(o); break;
  589.     case I_REGENERATE: i_regenerate(o); break;
  590.     case I_INVISIBLE: i_invisible(o); break;
  591.     case I_BREATHING: i_breathing(o); break;
  592.     case I_FEAR_RESIST: i_fear_resist(o); break;
  593.     case I_CHAOS: i_chaos(o); break;
  594.     case I_ACCURACY: i_accuracy(o); break;
  595.     case I_LEVITATION: i_levitate(o); break;
  596.     case I_CURE: i_cure(o); break;
  597.         
  598.     /* stick functions */
  599.     case I_FIREBOLT: i_firebolt(o); break;
  600.     case I_LBOLT: i_lbolt(o); break;
  601.     case I_MISSILE: i_missile(o); break;
  602.     case I_SLEEP_OTHER: i_sleep_other(o); break;
  603.     case I_FIREBALL: i_fireball(o); break;
  604.     case I_LBALL: i_lball(o); break;    
  605.     case I_SNOWBALL: i_snowball(o); break;
  606.     case I_SUMMON: i_summon(o); break;
  607.     case I_HIDE: i_hide(o); break;
  608.     case I_DISRUPT: i_disrupt(o); break;
  609.     case I_DISINTEGRATE: i_disintegrate(o); break;
  610.     case I_APPORT: i_apport(o); break;
  611.     case I_DISPEL: i_dispel(o); break;
  612.     case I_POLYMORPH: i_polymorph(o); break;
  613.     case I_FEAR:i_fear(o); break;
  614.  
  615.     /* food functions */
  616.     case I_FOOD: i_food(o); break;
  617.     case I_LEMBAS: i_lembas(o); break;
  618.     case I_STIM: i_stim(o); break;
  619.     case I_POW: i_pow(o); break;
  620.     case I_IMMUNE: i_immune(o); break;
  621.     case I_POISON_FOOD: i_poison_food(o); break;
  622.     case I_PEPPER_FOOD: i_pepper_food(o); break;
  623.     case I_CORPSE: i_corpse(o); break;
  624.  
  625.     /* boots functions */
  626.     case I_PERM_SPEED: i_perm_speed(o); break;
  627.     case I_PERM_HERO: i_perm_hero(o); break;
  628.     case I_PERM_LEVITATE: i_perm_levitate(o); break;
  629.     case I_PERM_AGILITY: i_perm_agility(o); break;
  630.       
  631.     /* artifact functions */
  632.     case I_SCEPTRE:i_sceptre(o);break;
  633.     case I_PLANES:i_planes(o);break;
  634.     case I_STARGEM:i_stargem(o);break;
  635.     case I_SYMBOL:i_symbol(o); break;
  636.     case I_ORBMASTERY: i_orbmastery(o); break;
  637.     case I_ORBFIRE: i_orbfire(o); break;
  638.     case I_ORBWATER: i_orbwater(o); break;
  639.     case I_ORBEARTH: i_orbearth(o); break;
  640.     case I_ORBAIR: i_orbair(o); break;
  641.     case I_ORBDEAD: i_orbdead(o); break;
  642.     case I_CRYSTAL: i_crystal(o); break;
  643.     case I_LIFE: i_life(o); break;
  644.     case I_DEATH: i_death(o); break;
  645.     case I_ANTIOCH: i_antioch(o); break;
  646.     case I_HELM: i_helm(o); break;
  647.     case I_KOLWYNIA: i_kolwynia(o); break;
  648.     case I_ENCHANTMENT: i_enchantment(o); break;
  649.     case I_JUGGERNAUT: i_juggernaut(o); break;
  650.  
  651.     /* cloak functions */
  652.     case I_PERM_DISPLACE: i_perm_displace(o); break;
  653.     case I_PERM_NEGIMMUNE: i_perm_negimmune(o); break;
  654.     case I_PERM_INVISIBLE: i_perm_invisible(o); break;
  655.     case I_PERM_PROTECTION: i_perm_protection(o);break;
  656.     case I_PERM_ACCURACY: i_perm_accuracy(o);break;
  657.     case I_PERM_TRUESIGHT: i_perm_truesight(o); break;
  658.  
  659.     /* ring functions */
  660.     case I_PERM_BURDEN: i_perm_burden(o); break;
  661.     case I_PERM_STRENGTH: i_perm_strength(o); break;
  662.     case I_PERM_GAZE_IMMUNE: i_perm_gaze_immune(o); break;
  663.     case I_PERM_FIRE_RESIST: i_perm_fire_resist(o); break;
  664.     case I_PERM_POISON_RESIST: i_perm_poison_resist(o); break;
  665.     case I_PERM_REGENERATE: i_perm_regenerate(o); break;
  666.     case I_PERM_KNOWLEDGE: i_perm_knowledge(o); break;
  667.  
  668.     /* armor functions */
  669.     case I_NORMAL_ARMOR: i_normal_armor(o); break;
  670.     case I_PERM_FEAR_RESIST: i_perm_fear_resist(o); break;
  671.     case I_PERM_ENERGY_RESIST: i_perm_energy_resist(o); break;
  672.     case I_PERM_BREATHING: i_perm_breathing(o); break;
  673.  
  674.     /* weapons functions */
  675.     case I_NORMAL_WEAPON: i_normal_weapon(o); break;
  676.     case I_LIGHTSABRE: i_lightsabre(o); break;
  677.     case I_DEMONBLADE: i_demonblade(o); break;
  678.     case I_DESECRATE: i_desecrate(o); break;
  679.     case I_MACE_DISRUPT: i_mace_disrupt(o); break;
  680.     case I_DEFEND: i_defend(o); break;
  681.     case I_VICTRIX: i_victrix(o); break;
  682.  
  683.     /* thing functions */        
  684.     case I_PICK: i_pick(o); break;
  685.     case I_KEY: i_key(o); break;
  686.     case I_PERM_ILLUMINATE: i_perm_illuminate(o); break;
  687.     case I_TRAP: i_trap(o); break;
  688.     case I_RAISE_PORTCULLIS:i_raise_portcullis(o); break;
  689.  
  690.     /* shield functions */
  691.     case I_NORMAL_SHIELD: i_normal_shield(o); break;
  692.     case I_PERM_DEFLECT: i_perm_deflect(o); break;
  693.   }
  694. }
  695.  
  696.